﻿using ExcellentProjectPlus.Aplicacion.Calificaciones.CalificacionEstudianteCursos;
using ExcellentProjectPlus.Dominio.Calificaciones.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Calificaciones.Controllers
{
    public class CalificacionEstudianteCursosController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDeCalificacionEstudianteCursos _servicioDeGestionDeCalificacionEstudianteCursos;
        #endregion

        #region Constructores
        public CalificacionEstudianteCursosController(IServicioDeGestionDeCalificacionEstudianteCursos servicioDeGestionDeCalificacionEstudianteCursos)
        {
            _servicioDeGestionDeCalificacionEstudianteCursos = servicioDeGestionDeCalificacionEstudianteCursos;
        }
        #endregion

        public IEnumerable<CalificacionEstudianteCurso> Get()
        {
            return _servicioDeGestionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursos();
        }

        [ResponseType(typeof(CalificacionEstudianteCurso))]
        public IHttpActionResult GetCalificacionEstudianteCurso(int id)
        {
            CalificacionEstudianteCurso calificacionEstudianteCurso = _servicioDeGestionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursoPorId(id);
            if (calificacionEstudianteCurso == null)
            {
                return NotFound();
            }
            return Ok(calificacionEstudianteCurso);
        }

        [ResponseType(typeof(CalificacionEstudianteCurso))]
        public IHttpActionResult Post(CalificacionEstudianteCurso calificacionEstudianteCurso)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            _servicioDeGestionDeCalificacionEstudianteCursos.AgregarCalificacionEstudianteCurso(calificacionEstudianteCurso);
            return CreatedAtRoute("DefaultApi", new { id = calificacionEstudianteCurso.Id }, calificacionEstudianteCurso);
        }

        public IHttpActionResult Put(int id, CalificacionEstudianteCurso calificacionEstudianteCurso)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != calificacionEstudianteCurso.Id)
            {
                return BadRequest();
            }

            _servicioDeGestionDeCalificacionEstudianteCursos.ModificarCalificacionEstudianteCurso(calificacionEstudianteCurso);

            return StatusCode(HttpStatusCode.NoContent);
        }


        [ResponseType(typeof(CalificacionEstudianteCurso))]
        public IHttpActionResult Delete(int id)
        {
            CalificacionEstudianteCurso calificacionEstudianteCurso = _servicioDeGestionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursoPorId(id);
            if (calificacionEstudianteCurso == null)
            {
                return NotFound();
            }
            _servicioDeGestionDeCalificacionEstudianteCursos.EliminarCalificacionEstudianteCurso(calificacionEstudianteCurso);
            return Ok(calificacionEstudianteCurso);
        }

        private bool ExistCalificacionEstudianteCurso(int id)
        {
            return _servicioDeGestionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursoPorId(id) != null;
        }

        [HttpGet()]
        [Route("api/calificacionEstudianteCursos/GetPagedCalificacionEstudianteCursos/{pageIndex}/{pageSize}")]
        public IEnumerable<CalificacionEstudianteCurso> GetPagedCalificacionEstudianteCursos(int pageIndex, int pageSize)
        {
            return _servicioDeGestionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursosPaginado(pageIndex, pageSize);
        }
    }
}
